今天是第三十天我們可以寫一個k8s資料庫管理系統,謝謝iT邦幫忙給我這次30天學習k8s新程式語言的機會,讓我能30天不中斷的持續學習,讓我能熟知k8s是可以去如何去部署的並且做好資料庫的管理,以下是我的程式碼
資料收集服務:這個服務將會從 Threads 或其他社群平台抓取數據(例如貼文、用戶資料),並且將這些資料放入資料庫中。
資料分析服務:一個用來分析資料的微服務,可以利用自然語言處理 (NLP) 技術來分析用戶的喜好。
資料庫管理系統:用來儲存和管理這些分析結果,並且提供 API 來查詢。
前端界面:使用者可以通過一個簡單的前端介面來查詢族群愛好,顯示分析結果。
首先,我們在 Kubernetes 中部署一個 MongoDB 資料庫來儲存收集到的 Threads 資料。
建立一個 MongoDB 部署文件 (mongodb-deployment.yaml
):
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- name: mongodb-storage
mountPath: /data/db
volumes:
- name: mongodb-storage
persistentVolumeClaim:
claimName: mongodb-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
ports:
- port: 27017
targetPort: 27017
selector:
app: mongodb
接著,為 MongoDB 創建一個 PVC(Persistent Volume Claim)來確保資料的持久性:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
這個微服務將通過 API 抓取 Threads 資料並存入 MongoDB。我們可以使用 Python 和 Flask 實現,並將它包裝成 Docker 映像檔。
data-collector.py
範例代碼:
from flask import Flask, request, jsonify
from pymongo import MongoClient
import requests
app = Flask(__name__)
client = MongoClient("mongodb://mongodb:27017/")
db = client['threads']
collection = db['posts']
# 從 Threads API 抓取資料並存入 MongoDB
@app.route('/collect', methods=['POST'])
def collect_data():
# 模擬 Threads API 資料獲取
response = requests.get('https://api.threads.com/posts')
if response.status_code == 200:
data = response.json()
collection.insert_many(data)
return jsonify({"status": "success"}), 200
else:
return jsonify({"status": "error"}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
建立一個 Dockerfile
:
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "data-collector.py"]
requirements.txt
:
Flask==2.1.1
pymongo==3.12.1
requests==2.26.0
將此微服務部署到 Kubernetes (data-collector-deployment.yaml
):
apiVersion: apps/v1
kind: Deployment
metadata:
name: data-collector
spec:
replicas: 1
selector:
matchLabels:
app: data-collector
template:
metadata:
labels:
app: data-collector
spec:
containers:
- name: data-collector
image: your-docker-image # 使用您推送到 Docker registry 的映像
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: data-collector
spec:
ports:
- port: 5000
targetPort: 5000
selector:
app: data-collector
這個微服務會從 MongoDB 中提取數據,進行 NLP 分析,並輸出分析結果。
data-analyzer.py
範例代碼:
from flask import Flask, jsonify
from pymongo import MongoClient
from textblob import TextBlob
app = Flask(__name__)
client = MongoClient("mongodb://mongodb:27017/")
db = client['threads']
collection = db['posts']
# 分析 Threads 貼文的情感
@app.route('/analyze', methods=['GET'])
def analyze_data():
posts = collection.find({})
result = []
for post in posts:
text = post.get('text', '')
analysis = TextBlob(text).sentiment
result.append({
'post': text,
'sentiment': analysis.polarity
})
return jsonify(result), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001)
當然,我將逐步解釋每一段程式碼,讓你了解它們的作用和如何運行。
mongodb-deployment.yaml
)這段 YAML 文件用來在 Kubernetes 集群中部署一個 MongoDB 服務,提供資料儲存功能。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- name: mongodb-storage
mountPath: /data/db
volumes:
- name: mongodb-storage
persistentVolumeClaim:
claimName: mongodb-pvc
apiVersion: apps/v1
和 kind: Deployment
:這表示 Kubernetes 將部署一個 MongoDB 實例。Deployment
是一種控制器,管理 MongoDB 實例的生命週期。replicas: 1
:這表示我們只部署一個 MongoDB 副本。可以根據需求擴展副本數。image: mongo:latest
:告訴 Kubernetes 使用最新版本的 MongoDB 映像檔來創建容器。containerPort: 27017
:這是 MongoDB 預設使用的端口,對應容器內的服務。volumeMounts
和 volumes
:這部分是將 MongoDB 的資料儲存在容器外部(persistent volume),保證數據的持久性。mongodb-pvc
是稍後定義的存儲卷聲明。apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
PersistentVolumeClaim
(PVC):這用來向 Kubernetes 請求 1GiB 的存儲空間,供 MongoDB 使用。它確保資料不會因為 MongoDB 容器被刪除而丟失。data-collector.py
)這段程式碼用來從 Threads 平台抓取數據,並將這些數據存入 MongoDB。
from flask import Flask, request, jsonify
from pymongo import MongoClient
import requests
app = Flask(__name__)
client = MongoClient("mongodb://mongodb:27017/")
db = client['threads']
collection = db['posts']
Flask
:用來建立簡單的 HTTP 伺服器,我們可以通過它來接收請求,並返回結果。MongoClient
:這是用來連接到 MongoDB 資料庫的客戶端。這裡指定了 MongoDB 的連接字串 mongodb://mongodb:27017/
,這與我們之前部署的 MongoDB 服務相連。db
和 collection
:db
是 MongoDB 的資料庫名稱,我們叫它 threads
。collection
是資料庫中的一個集合,用來儲存 Threads 的資料。@app.route('/collect', methods=['POST'])
def collect_data():
# 模擬 Threads API 資料獲取
response = requests.get('https://api.threads.com/posts')
if response.status_code == 200:
data = response.json()
collection.insert_many(data)
return jsonify({"status": "success"}), 200
else:
return jsonify({"status": "error"}), 500
/collect
路由:當收到 POST 請求時,這個端點會執行一個函數去模擬調用 Threads 的 API (requests.get
),來獲取資料(假設 URL 為 https://api.threads.com/posts
)。
collection.insert_many(data)
:一旦成功獲取資料,我們將使用 insert_many
方法將所有資料插入到 MongoDB 集合中。
最後,根據成功或失敗,返回 JSON 格式的回應,包含狀態訊息。
data-analyzer.py
)這段程式碼負責對 MongoDB 中的數據進行分析(如情感分析)。
from flask import Flask, jsonify
from pymongo import MongoClient
from textblob import TextBlob
app = Flask(__name__)
client = MongoClient("mongodb://mongodb:27017/")
db = client['threads']
collection = db['posts']
TextBlob
:這是用來進行簡單情感分析的 Python 套件。它可以用來評估文字的情感極性。@app.route('/analyze', methods=['GET'])
def analyze_data():
posts = collection.find({})
result = []
for post in posts:
text = post.get('text', '')
analysis = TextBlob(text).sentiment
result.append({
'post': text,
'sentiment': analysis.polarity
})
return jsonify(result), 200
/analyze
路由:當接收到 GET 請求時,這個端點會查詢 MongoDB 中所有貼文 (collection.find({})
)。TextBlob(text).sentiment
:對每篇貼文進行情感分析,polarity
屬性範圍為 -1 到 1,分別代表負面和正面情感。data-collector-deployment.yaml
)這個文件用來在 Kubernetes 上部署我們的資料收集微服務。
apiVersion: apps/v1
kind: Deployment
metadata:
name: data-collector
spec:
replicas: 1
selector:
matchLabels:
app: data-collector
template:
metadata:
labels:
app: data-collector
spec:
containers:
- name: data-collector
image: your-docker-image # 使用您推送到 Docker registry 的映像
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: data-collector
spec:
ports:
- port: 5000
targetPort: 5000
selector:
app: data-collector
replicas: 1
:部署一個副本的資料收集微服務。image
:這裡需要指定你已推送到 Docker registry 的映像檔,這是微服務運行所需的環境。Service
:提供一個內部網絡的方式來訪問該服務,映射至 5000 端口,這與 Flask 伺服器的端口相對應。這些部分構成了一個完整的社群資料分析系統。首先,我們部署 MongoDB 來儲存數據,然後通過資料收集微服務從 Threads 收集數據,並使用資料分析微服務對數據進行情感分析,最終可以在前端顯示這些結果。這個系統可以擴展,用於其他不同的數據分析場景。
最後這次真的非常謝謝iT邦幫忙能給我這次機會去做新的程式語言的學習,最重要的是能夠運用在自己活當中,因此這次的鐵人賽非常希望能得名,謝謝iT邦幫忙!